Present day computer software is typically generated by a software manufacturer and shipped as a set of files. These files may include an installation program, one or more executable files, a set of library or data files, and configuration files. Typically, the end user of the software runs the installation program, which copies the executable files and libraries into appropriate directories, and configures the software according to configuration parameters contained in the configuration files. Often, the software configuration may be customized by either an intermediate customer (i.e, an Original Equipment Manufacturer (OEM) or Value Added Reseller (VAL) selling to end users) or by the software manufacturer working with the intermediate customer to meet the customers' particular needs. Software configuration customization is typically achieved today by providing a set of user customizable configuration files which may be modified by the intermediate customer, or by the manufacturer according to the customer's specifications, to configure the software to provide specific software options for the end user. An example of a configuration file may be a menu registration file that contains configuration parameters that describe the types, layout and functionality of menu bars displayed in conjunction with, and utilized by, the software application. The menu registration file is typically in text format, where each different menu bar is specified by including an entry containing a menu identifier and textual description of the contents or functionality of the menu. The contents of the menu registration file are used to generate the menu bar. Accordingly, if a customer requires an additional menu bar, the menu registration file may be modified to include an entry containing the menu identifier and information from which to generate the new menu bar or additional files from which to add new functionality to the menus.
The above described mechanism for providing customer-specific software configurations is both efficient and convenient in terms of development and maintainability for software manufacturers, intermediate customers, and end users. Specifically, the original executable software may be modified, and the new revision may be shipped and installed by end users without requiring a special version of software to be created for each customer specific configuration. In addition, an intermediate customer may add, remove, and modify configurable features that it wants to ship to its end users simply by modifying the customer specific configuration files, rather than requiring a special version of software to be created for its new customer specific configuration.
One aspect of providing customizable configuration files that has heretofore been unaddressed is the vulnerability of the customizable configuration files to end-user tampering. Specifically, software manufacturers provide non-secure customizable configuration files to allow an intermediate customer to edit these configuration files, as for example to specify particular menu items and software functionality. However, these same customizable configuration files containing customized configuration parameters may also be shipped to the end user in non-secure form. It may be undesirable to certain customers to allow end users to have access to its customer specific configuration files. Accordingly, a need exists for a mechanism which allows a software manufacturer and a customer to customize the software configuration and then to secure the configuration parameters to disallow tampering by unauthorized users.